package it.storm.solution;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 217. 存在重复元素
 * https://leetcode-cn.com/problems/contains-duplicate/
 */
public class Solutions_217 {
    public static void main(String[] args) {
//        int[] nums = {1, 2, 3, 1};  // output: true
//        int[] nums = {1, 2, 3, 4};  // output: false
//        int[] nums = {1, 1, 1, 3, 3, 4, 3, 2, 4, 2};  // output: true
        int[] nums = {};  // output: false

        boolean result = containsDuplicate(nums);
        System.out.println(result);
    }

    /**
     * 解法一：排序（3ms）
     */
    public static boolean containsDuplicate(int[] nums) {
        if (nums == null || nums.length < 2) {
            return false;
        }
        Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                // 前后两元素相等，那么两元素重复
                return true;
            }
        }
        return false;
    }

    /**
     * 解法二：Set 集合（6ms）
     */
    public static boolean containsDuplicate2(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
//            if (set.contains(num)) {
//                return true;
//            }
            set.add(num);
        }
        if (set.size() == nums.length) {
            // 不存在重复元素
            return false;
        }
        return true;
    }
}
